﻿namespace Genesis.Domain
{

    using Genesis.Infrastructure;
    using Genesis.Infrastructure.Domain;

    public class Mask : Entity
    {

        [Signature]
        public virtual Forum Forum { get; protected set; }

        public virtual bool CanBypassQueue { get; set; }

        public virtual bool CanPostNewThreads { get; set; }

        public virtual bool CanPostNewReplies { get; set; }

        public virtual bool CanReplyToOwnThreads { get; set; }
        
        public virtual bool CanReplyToOwnReplies { get; set; }
        
        public virtual bool CanReplyToOthersThreads { get; set; }
        
        public virtual bool CanReplyToOthersReplies { get; set; }

        public virtual bool CanEditOwnThreads { get; set; }
        
        public virtual bool CanEditOwnReplies { get; set; }
        
        public virtual bool CanEditOthersThreads { get; set; }
        
        public virtual bool CanEditOthersReplies { get; set; }

        public virtual bool CanDeleteOwnThreads { get; set; }
        
        public virtual bool CanDeleteOwnReplies { get; set; }
        
        public virtual bool CanDeleteOthersThreads { get; set; }
        
        public virtual bool CanDeleteOthersReplies { get; set; }

        public virtual bool CanMoveOwnThreads { get; set; }
        
        public virtual bool CanMoveOwnReplies { get; set; }
        
        public virtual bool CanMoveOthersThreads { get; set; }
        
        public virtual bool CanMoveOthersReplies { get; set; }

        public virtual bool CanCloseOwnThreads { get; set; }
        
        public virtual bool CanCloseOthersThreads { get; set; }

        public virtual bool CanOpenOwnThreads { get; set; }
        
        public virtual bool CanOpenOthersThreads { get; set; }

        public Mask(Forum forum)
        {
            
            Logic.Check(forum != null, "Forum can not be null!");
            
            Forum = forum;
        
        }

        protected Mask() { }

    }

}